import axios from 'axios';

// 配置axios基础URL
axios.defaults.baseURL = 'http://localhost:8080';

console.log('🔍 测试模型上传和动态匹配功能...');
console.log('='.repeat(60));

async function testModelUploadAndMatch() {
  try {
    // 1. 测试获取model_id列表
    console.log('📋 1. 测试获取model_id列表...');
    const modelIdsResponse = await axios.get('/api/v2/model/modelIds');
    console.log('✅ 获取model_id列表成功');
    console.log(`   状态码: ${modelIdsResponse.status}`);
    console.log(`   数据条数: ${modelIdsResponse.data.data?.length || 0}`);
    
    if (modelIdsResponse.data.data?.length > 0) {
      const firstModelId = modelIdsResponse.data.data[0];
      console.log(`   第一个model_id: ${firstModelId.m_name} (ID: ${firstModelId.m_id}, 职业: ${firstModelId.m_occupation})`);
    }

    // 2. 测试动态匹配功能
    console.log('\n🎯 2. 测试动态匹配功能...');
    const testModelNames = [
      '经典刀锋皮肤',
      '血腥玛丽',
      '王女艾琳',
      '烈焰女皇',
      '不存在的模型'
    ];
    
    for (const modelName of testModelNames) {
      const match = modelIdsResponse.data.data?.find(item => 
        item.m_name === modelName || 
        modelName.includes(item.m_name) || 
        item.m_name.includes(modelName)
      );
      
      if (match) {
        console.log(`   ✅ "${modelName}" -> 匹配到: ${match.m_name} (ID: ${match.m_id}, 职业: ${match.m_occupation})`);
        console.log(`      图片URL: https://model.lovemmd.cn/img/${match.m_id}.png`);
      } else {
        console.log(`   ❌ "${modelName}" -> 未找到匹配`);
      }
    }

    // 3. 测试文件上传（模拟）
    console.log('\n📁 3. 测试文件上传功能...');
    console.log('   文件上传路径配置:');
    console.log('   - Windows: c:\\model\\');
    console.log('   - Linux: /model/');
    console.log('   支持格式: .pmx, .pmd, .zip, .rar, .7z');
    console.log('   文件大小限制: 50MB');

    // 4. 测试添加模型（包含文件上传）
    console.log('\n📝 4. 测试添加模型（包含文件上传）...');
    const addModelData = {
      modelId: 0,
      modelName: '经典刀锋皮肤',
      modelOccupation: 'bladePoint',
      modelFile: null, // 实际使用时这里会是文件对象
      modelImg: 'https://model.lovemmd.cn/img/101011000.png',
      modelSource: '游戏内提取',
      boneBinding: '已绑定',
      physicsBinding: '已绑定',
      expressionMaking: '已制作'
    };
    
    console.log('   模型数据准备完成:');
    console.log(`   - 模型名称: ${addModelData.modelName}`);
    console.log(`   - 模型职业: ${addModelData.modelOccupation}`);
    console.log(`   - 图片URL: ${addModelData.modelImg}`);
    console.log(`   - 模型来源: ${addModelData.modelSource}`);

    // 5. 测试前端功能说明
    console.log('\n🎨 5. 前端功能说明...');
    console.log('   新增功能:');
    console.log('   - ✅ 模型URL替换为文件上传组件');
    console.log('   - ✅ 根据模型名称自动匹配model_id');
    console.log('   - ✅ 自动填充模型职业');
    console.log('   - ✅ 自动生成图片URL (https://model.lovemmd.cn/img/{m_id}.png)');
    console.log('   - ✅ 图片预览功能');
    console.log('   - ✅ 文件类型和大小验证');
    console.log('   - ✅ 跨平台文件存储路径');

    // 6. 测试匹配算法
    console.log('\n🔍 6. 测试匹配算法...');
    const testCases = [
      { input: '经典刀锋皮肤', expected: '经典刀锋皮肤' },
      { input: '刀锋皮肤', expected: '经典刀锋皮肤' },
      { input: '血腥', expected: '血腥玛丽' },
      { input: '玛丽', expected: '血腥玛丽' },
      { input: '烈焰', expected: '烈焰女皇' },
      { input: '不存在的模型', expected: null }
    ];
    
    for (const testCase of testCases) {
      const match = modelIdsResponse.data.data?.find(item => {
        // 精确匹配
        if (item.m_name === testCase.input) return true;
        // 包含匹配
        if (item.m_name.includes(testCase.input) || testCase.input.includes(item.m_name)) return true;
        // 关键词匹配
        const keywords = testCase.input.split(/[\s\-·]+/);
        for (const keyword of keywords) {
          if (keyword.length > 1 && item.m_name.includes(keyword)) return true;
        }
        return false;
      });
      
      if (match) {
        console.log(`   ✅ "${testCase.input}" -> 匹配到: ${match.m_name}`);
      } else {
        console.log(`   ❌ "${testCase.input}" -> 未匹配`);
      }
    }

  } catch (error) {
    console.log('❌ 测试失败:', error.message);
    if (error.response) {
      console.log(`   状态码: ${error.response.status}`);
      console.log(`   响应数据:`, error.response.data);
    }
  }
}

// 运行测试
testModelUploadAndMatch().then(() => {
  console.log('\n' + '='.repeat(60));
  console.log('🎉 测试完成');
  console.log('\n📋 使用说明:');
  console.log('1. 在管理后台点击"发布模型"');
  console.log('2. 输入模型名称，系统会自动匹配职业和图片');
  console.log('3. 上传模型文件（支持.pmx/.pmd/.zip/.rar/.7z格式）');
  console.log('4. 文件会自动保存到系统指定目录');
  console.log('5. 填写其他信息并提交');
}).catch(console.error);
